import { NestFactory } from '@nestjs/core';
import { KvBlogModule } from './kv-blog.module';
import { ConfigService } from '@nestjs/config';
import { Logger } from '@nestjs/common';
import { HealthCheckService } from '@app/health';

async function bootstrap() {
  const app = await NestFactory.create(KvBlogModule);
  const configService = app.get(ConfigService);
  const logger = new Logger('Bootstrap');
  
  // 🔍 启动前检查所有外部服务连接
  logger.log("🔗 开始连接检查...");
  const healthCheckService = app.get(HealthCheckService);
  const allConnectionsHealthy = await healthCheckService.checkAllConnections();

  if (!allConnectionsHealthy) {
    logger.error("💥 外部服务连接失败，应用启动中止！");
    logger.error("请检查以下服务配置和可用性：");
    logger.error("1. 数据库服务是否启动并可访问");
    logger.error("2. Redis服务是否启动并可访问");
    logger.error("3. 网络连接是否正常");
    logger.error("4. 配置文件中的连接参数是否正确");

    // 关闭应用
    await app.close();
    process.exit(1);
  }
  
  app.enableCors();
  // 如果部署在反向代理后，建议在平台层开启 trust proxy（此处保留注释说明）
  app.setGlobalPrefix('api');
  
  const port = configService.get('BLOG_APP_PORT') ?? 7100;
  await app.listen(port);
  
  logger.log(`🚀 KvBlog is running on: http://localhost:${port}/api`);
  logger.log(`💊 Health Check: http://localhost:${port}/api/health`);
}
bootstrap();
